package com.example.demo.mapper;

import com.example.demo.entity.ResourceFile;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 资源Mapper
 *
 * @author 叮当猫的百宝箱
 * @since 1.0
 */
public interface ResourceFileMapper {

    /**
     * 添加资源
     *
     * @param resourceFile 资源信息
     * @return 受影响的行数
     */
    int insert(ResourceFile resourceFile);

    /**
     * 根据资源ID查询资源信息
     *
     * @param id 资源ID
     * @return 资源的详情
     */
    ResourceFile findById(Long id);

    /**
     * 根据资源ID更新资源信息
     *
     * @param id           资源ID
     * @param resourceFile 待更新的资源信息
     * @return 受影响的行数
     */
    int updateById(@Param("id") Long id, @Param("resourceFile") ResourceFile resourceFile);

    /**
     * 根据资源ID更新资源信息
     *
     * @param id           资源ID
     * @param resourceFile 待更新的资源信息(为null的属性将被忽略)
     * @return 受影响的行数
     */
    int updateSelectiveById(@Param("id") Long id, @Param("resourceFile") ResourceFile resourceFile);


    /**
     * 将资源信息标记为已删除
     *
     * @param id         将被删除的ID
     * @param deleteTime 删除的时间
     * @return 受影响的行数
     */
    int markAsDeletedById(@Param("id") Long id, @Param("deleteTime") LocalDateTime deleteTime);

    /**
     * 将资源标记为被使用
     *
     * @param id 被标记的资源ID
     * @return 受影响的行数
     */
    int markAsUsedById(Long id);

    /**
     * 将资源标记为未使用
     *
     * @param id 被标记的资源ID
     * @return 受影响的行数
     */
    int markAsNotUsedById(Long id);

    /**
     * 获取全部资源列表
     *
     * @return 全部资源列表
     */
    List<ResourceFile> findAll();

    /**
     * 查询失效是资源列表
     *
     * <p>
     * 查询未删除的并且未使用的并且创建时间小于失效时间的的资源列表
     * </p>
     *
     * @param invalidTime 失效时间
     * @return 失效的资源列表
     */
    List<ResourceFile> findInvalidAll(LocalDateTime invalidTime);


}
